/**
 * IArtistService
 *
 * 主要职责：
 * - 歌手信息管理（CRUD）、头像存储
 *
 * 关键方法示例：
 * - Artist createArtist(ArtistDto dto, MultipartFile avatar)
 *
 * 实现关注点：
 * - Minio 调用、事务边界、重复名检查
 *
 * 答辩要点：
 * - 文件一致性与事务策略
 */
package net.zjitc.yqmusicserver.service;

import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.servlet.http.HttpServletRequest;
import net.zjitc.yqmusicserver.domain.Artist;
import net.zjitc.yqmusicserver.domain.dto.ArtistAddDTO;
import net.zjitc.yqmusicserver.domain.dto.ArtistDTO;
import net.zjitc.yqmusicserver.domain.dto.ArtistUpdateDTO;
import net.zjitc.yqmusicserver.domain.vo.ArtistDetailVO;
import net.zjitc.yqmusicserver.domain.vo.ArtistNameVO;
import net.zjitc.yqmusicserver.domain.vo.ArtistVO;
import net.zjitc.yqmusicserver.result.PageResult;
import net.zjitc.yqmusicserver.result.Result;

import java.util.List;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author 罗翼侨
 * @since 2025/6/18 10:19
 */
public interface IArtistService extends IService<Artist> {

    // 获取所有歌手
    Result<PageResult<ArtistVO>> getAllArtists(ArtistDTO artistDTO);

    // 获取所有歌手
    Result<PageResult<Artist>> getAllArtistsAndDetail(ArtistDTO artistDTO);

    // 获取所有歌手id和名字
    Result<List<ArtistNameVO>> getAllArtistNames();

    // 获取随机歌手
    Result<List<ArtistVO>> getRandomArtists();

    // 根据id获取歌手详情
    Result<ArtistDetailVO> getArtistDetail(Long artistId, HttpServletRequest request);

    // 获取所有歌手数量
    Result<Long> getAllArtistsCount(Integer gender, String area);

    // 添加歌手
    Result addArtist(ArtistAddDTO artistAddDTO);

    // 更新歌手
    Result updateArtist(ArtistUpdateDTO artistUpdateDTO);

    // 更新歌手头像
    Result updateArtistAvatar(Long artistId, String avatar);

    // 删除歌手
    Result deleteArtist(Long ArtistId);

    // 批量删除歌手
    Result deleteArtists(List<Long> artistIds);

}
